﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Homework_1._2_Calc_with_try_to_parse
{
    class Program
    {

        public static float ReadFloatFromConsole(String inputMessage)
        {
            Console.WriteLine(inputMessage);  
            
            string ast = Console.ReadLine();
            float a;
            bool ab = float.TryParse(ast, out a);
            if (ab)
            {
                return a;
            }
            else
            {
                int exc = 1;
                WriteException(exc);
                return ReadFloatFromConsole(inputMessage);
            }
        }
        
        public static void WriteException(int errorCode)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            if (errorCode == 1)
            {
                Console.WriteLine("Извините, но это не число. \r\nЛибо введённое число превышает предел допустимых значений. Повторите ввод!");
            }
            else if (errorCode == 2)
            {
                Console.WriteLine("Извините, такой операции не существует. Повторите ввод!");
            }
            else
            {
                Console.WriteLine("Неизвестный код ошибки!");
            }
            Console.ResetColor();
            Console.WriteLine("Нажмите любую клавишу, чтобы продолжить");
            Console.ReadKey();
            Console.Clear();
        }

        public static void PrintWelcomeMessage()
        {
            Console.ForegroundColor = ConsoleColor.Magenta;
            Console.WriteLine("Easy calc 1.0.1 (Single floats tryparse or nothing:)");
            Console.ResetColor();
            Console.WriteLine(Environment.NewLine);
        }

        public static void ExecuteLab()
        {
            PrintWelcomeMessage();

            float a = ReadFloatFromConsole("Введите первое число:");
            float b = ReadFloatFromConsole("Введите второе число:");

            Console.WriteLine("Введите операцию (+,-.*,/):");
            string cst = Console.ReadLine();
            if (cst == "+" || cst == "-" || cst == "*" || cst == "/")
            {
                CalculateOperation(ref a, ref b, ref cst);
            }
            else
            {
                int exc = 2;
                WriteException(exc);
            }
                 
        }

        static void CalculateOperation(ref float a, ref float b, ref string c)
        {
            Console.Clear();
            Console.ForegroundColor = ConsoleColor.Magenta;
            Console.WriteLine("Easy calc 1.0.1 (Single floats tryparse or nothing:)");
            Console.ResetColor();
            Console.WriteLine(Environment.NewLine); 
            if (c == "+")
            {
                Console.Write(a);
                Console.Write(" + ");
                Console.Write(b);
                Console.Write(" = ");
                Console.Write(a + b);
            }
            if (c == "-")
            {
                Console.Write(a);
                Console.Write(" - ");
                Console.Write(b);
                Console.Write(" = ");
                Console.Write(a - b);
            }
            if (c == "*")
            {
                Console.Write(a);
                Console.Write(" * ");
                Console.Write(b);
                Console.Write(" = ");
                Console.Write(a * b);
            }
            if (c == "/")
            {
                Console.Write(a);
                Console.Write(" / ");
                Console.Write(b);
                Console.Write(" = ");
                Console.Write(a / b);
            }
            Console.WriteLine(Environment.NewLine);
            Console.WriteLine("Посчитать ещё? y - Да");
            Console.WriteLine("Введите любую другую клавишу для выхода");
            string d = Console.ReadLine();
            if (d == "y")
            {
                Console.Clear();
                ExecuteLab();
            }
            else
            {
                Environment.Exit(0);
            }

        }
        
        static void Main(string[] args)
        {
            ExecuteLab();
        }
    }
}
